#ifndef __DEVELOP_DEF_H
#define __DEVELOP_DEF_H

#include "sdk_ifs_udk_cfg.h"
#include "udf_cfg.h"

#include "develop_user_def.h"

/*
系统配置，用户不可修改*/
#if 1
#define TEST_MODE_FRAME_FILTER(x,y) ((x%y)==0)

#if !defined(LOG_LEVEL)
#define LOG_LEVEL (LOG_LEVEL_EMERG)
#endif

#if !defined(TEST_MODE_LOG_LEVEL)
#define TEST_MODE_LOG_LEVEL (LOG_LEVEL_EMERG)
#endif

#if (TEST_MODE > 0)
#define DEBUG_DATA_ENABLE
#ifdef CUSTOM_DATA_ENABLE
#undef CUSTOM_DATA_ENABLE
#endif
#ifdef LOG_LEVEL
#undef LOG_LEVEL
#endif

#if !defined(LOG_LEVEL)
#define LOG_LEVEL (TEST_MODE_LOG_LEVEL)
#endif
#define LOG_ENABLE
#else
#if !defined(LOG_LEVEL)
#define LOG_LEVEL (LOG_LEVEL_EMERG) // 7--debug 5-notice   3-warning  1-error 0-emergcy
#endif
#endif

#endif


#if 1 /* LOG配置 */

#ifndef LOG_ENABLE
#define LOG_ENABLE
#endif

#define LOG_LEVEL_DEBUG   (7)
#define LOG_LEVEL_INFO    (6)
#define LOG_LEVEL_NOTICE  (5)
#define LOG_LEVEL_WARNING (3)
#define LOG_LEVEL_ERROR   (1)
#define LOG_LEVEL_EMERG   (0)

#ifdef LOG_ENABLE

#define LOG_INTERFACE                (0) // 0 uart  1 spi

#if LOG_INTERFACE == 1
#define LOG_SEND_STRING(lvl,str) if( lvl <= LOG_LEVEL ){udsf_spi_send_string(str);}
#define LOG_SEND_U32_BASE16(lvl,a,b,c,d,e) if( lvl <= LOG_LEVEL ){udsf_spi_send_u32_base16(a,b,c,d,e);}
#define LOG_SEND_U16_BASE16(lvl,a,b,c,d,e) if( lvl <= LOG_LEVEL ){udsf_spi_send_u16_base16(a,b,c,d,e);}
#define LOG_SEND_U8_BASE16(lvl,a,b,c,d) if( lvl <= LOG_LEVEL ){udsf_spi_send_u8_base16(a,b,c,d);}
#else
#define LOG_SEND_STRING(lvl,str); if( lvl <= LOG_LEVEL ){udsf_uart_send_string(str);}
#define LOG_SEND_U32_BASE16(lvl,a,b,c,d,e); if( lvl <= LOG_LEVEL ){udsf_uart_send_u32_base16(a,b,c,d,e);}
#define LOG_SEND_U16_BASE16(lvl,a,b,c,d,e); if( lvl <= LOG_LEVEL ){udsf_uart_send_u16_base16(a,b,c,d,e);}
#define LOG_SEND_U8_BASE16(lvl,a,b,c,d); if( lvl <= LOG_LEVEL ){udsf_uart_send_u8_base16(a,b,c,d);}
#endif
#else 
#define LOG_SEND_STRING(lvl,str) 
#define LOG_SEND_U32_BASE16(lvl,a,b,c,d,e)
#define LOG_SEND_U16_BASE16(lvl,a,b,c,d,e)
#define LOG_SEND_U8_BASE16(lvl,a,b,c,d)
#endif

#endif


#ifdef DEVELOP_MODE
/*
打开DEVELOP_DEBUG选项，初次全编译，后续udp中算法等参数只在UDFxx中修改 batch build内可只编译UDFxx、UDF_PRJ以节省时间。
release 时需确保DEVELOP_DEFBUG undefined
*/
#define UDF_DIS_CRC
#define UDF_USE_MAXLEN
#endif

#ifdef UDF_USE_MAXLEN
#undef UDF01_LEN
#undef UDF02_LEN
#undef UDF03_LEN
#undef UDF04_LEN
#undef UDF05_LEN
#undef UDF06_LEN
#undef UDF07_LEN
#undef UDF08_LEN
#undef UDF09_LEN
#undef UDF10_LEN
#undef UDF11_LEN
#undef UDF12_LEN
#undef UDF13_LEN
#undef UDF14_LEN
#undef UDF15_LEN
#undef UDF16_LEN
#define UDF01_LEN (UDF_MAX_SIZE-sizeof(sUDF_global_t)-sizeof(sUDF_Info_t))
#define UDF02_LEN (UDF_MAX_SIZE-sizeof(sUDF_global_t)-sizeof(sUDF_Info_t))
#define UDF03_LEN (UDF_MAX_SIZE-sizeof(sUDF_global_t)-sizeof(sUDF_Info_t))
#define UDF04_LEN (UDF_MAX_SIZE-sizeof(sUDF_global_t)-sizeof(sUDF_Info_t))
#define UDF05_LEN (UDF_MAX_SIZE-sizeof(sUDF_global_t)-sizeof(sUDF_Info_t))
#define UDF06_LEN (UDF_MAX_SIZE-sizeof(sUDF_global_t)-sizeof(sUDF_Info_t))
#define UDF07_LEN (UDF_MAX_SIZE-sizeof(sUDF_global_t)-sizeof(sUDF_Info_t))
#define UDF08_LEN (UDF_MAX_SIZE-sizeof(sUDF_global_t)-sizeof(sUDF_Info_t))
#define UDF09_LEN (UDF_MAX_SIZE-sizeof(sUDF_global_t)-sizeof(sUDF_Info_t))
#define UDF10_LEN (UDF_MAX_SIZE-sizeof(sUDF_global_t)-sizeof(sUDF_Info_t))
#define UDF11_LEN (UDF_MAX_SIZE-sizeof(sUDF_global_t)-sizeof(sUDF_Info_t))
#define UDF12_LEN (UDF_MAX_SIZE-sizeof(sUDF_global_t)-sizeof(sUDF_Info_t))
#define UDF13_LEN (UDF_MAX_SIZE-sizeof(sUDF_global_t)-sizeof(sUDF_Info_t))
#define UDF14_LEN (UDF_MAX_SIZE-sizeof(sUDF_global_t)-sizeof(sUDF_Info_t))
#define UDF15_LEN (UDF_MAX_SIZE-sizeof(sUDF_global_t)-sizeof(sUDF_Info_t))
#define UDF16_LEN (UDF_MAX_SIZE-sizeof(sUDF_global_t)-sizeof(sUDF_Info_t))
#endif

#if  (DYNALOAD_FW == 1)
/*note 动态加载固件 必须udf长度为-2(int16),flash接口必须为4线flash,由于长度为-2故crc校验不可用*/
#define UDP_UDF_LEN(x) 0xFFFE
#ifdef FLASH_INTERFACE
#undef FLASH_INTERFACE
#define FLASH_INTERFACE (1)
#endif

#ifndef UDF_DIS_CRC
#define UDF_DIS_CRC
#endif
#else


#define UDP_UDF_LEN(x) UDF##x##_LEN
#endif

#ifdef UDF_DIS_CRC
	#ifdef FUNC_CRC_PATCH_EN
		#undef FUNC_CRC_PATCH_EN
		#define FUNC_CRC_PATCH_EN FUNC_CRC_PATCH_DIS
	#endif
#endif


#endif

